package com.armed.ejb.sessions;

import com.armed.ejb.entities.TiposProducto;
import com.armed.ejb.transference.TipoProducto;
import com.armed.ejb.transference.helpers.DataReverseTransferHelper;
import com.armed.ejb.transference.helpers.DataTransferHelper;
import com.armed.excepciones.productos.TipoProductoAsociadoAVentaException;
import com.armed.excepciones.productos.TipoProductoRepetidoException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;

/**
 * Class TiposProductoFacade
 *
 *
 * @author init() software
 * @version 08/02/2008 
 */
@Stateless
public class TiposProductoFacade implements TiposProductoFacadeRemote
{

    @PersistenceContext
    private EntityManager em;

    /** Constructor of TiposProductoFacade */
    public TiposProductoFacade()
    {
    }

    public void create(TipoProducto tiposProducto) throws TipoProductoRepetidoException
    {
        TiposProducto prod = DataReverseTransferHelper.revertProductType(tiposProducto);
        try
        {
            em.persist(prod);
            em.flush();
        }
        catch (PersistenceException e)
        {
            if (e.getCause().getCause() instanceof SQLIntegrityConstraintViolationException)
                throw new TipoProductoRepetidoException(tiposProducto);
            else
                throw e;
        }
    }

    public void edit(TipoProducto tiposProducto) throws TipoProductoRepetidoException
    {
        try
        {
            em.merge(DataReverseTransferHelper.revertProductType(tiposProducto));
            em.flush();
        }
        catch (PersistenceException e)
        {
            if (e.getCause().getCause() instanceof SQLIntegrityConstraintViolationException)
                throw new TipoProductoRepetidoException(tiposProducto);
            else
                throw e;
        }
    }

    public void remove(TipoProducto tiposProducto) throws TipoProductoAsociadoAVentaException
    {
        try
        {
            em.remove(em.merge(DataReverseTransferHelper.revertProductType(tiposProducto)));
            em.flush();
        }
        catch (PersistenceException e)
        {
            if (e.getCause().getCause() instanceof SQLIntegrityConstraintViolationException)
                throw new TipoProductoAsociadoAVentaException(tiposProducto);
            else
                throw e;
        }
    }

    public TipoProducto find(Object id)
    {
        return DataTransferHelper.copyProductType(em.find(com.armed.ejb.entities.TiposProducto.class, id));
    }

    public List<TipoProducto> findAll()
    {
        return DataTransferHelper.copyProductTypesToList(em.createQuery("select object(o) from TiposProducto as o").getResultList());
    }
}
